<?php

/**
 * @author Grover Campos
 * @version 1.0
 * @created 03-ago-2009 06:43:06 p.m.
 */
class Gtux_Model_Gateway_Elemento extends Gtux_Model_Gateway_Abstract 
{

  /**
   * Devuelve la tabla
   *
   * @return Gtux_Model_Table_User
   */
	public function getDbTable()
	{
    if (null == $this->_dbTable) 
    {
      $this->setDbTable('Gtux_Model_Table_Elemento');
    }
    return $this->_dbTable;
	}

	/**
	 * 
	 * @param Gtux_Model_Elemento $elemento
	 * @return int
	 */
	public function delete(Gtux_Model_Abstract $elemento)
	{
    $where = $this->getDbTable()
                  ->getAdapter()
                  ->quoteInto('id_elemento = ?', $elemento->getIdElemento());
    return $this->getDbTable()->delete($where);
	}

	public function fetchAll()
	{
    $rs      = $this->getDbTable()->fetchAll();
    $entries = array();
    foreach ($rs as $row) 
    {
      $entries[] = new Gtux_Model_Elemento(null, $row);
    }
    return $entries;
	}

	/**
	 * 
	 * @param Gtux_Model_Elemento $elemento
	 */
	public function insert(Gtux_Model_Abstract $elemento)
	{
	  $data = array(
	   'id_elemento' => $elemento->getIdElemento(),
	   'nombre'      => $elemento->getNombre()
	  );
  	return $this->getDbTable()->insert($data);
	}

	/**
	 * Actualiza el registro y devuelve el número de registros modificados
	 *
	 * @param Gtux_Model_Elemento $elemento
	 * @return int
	 */
	public function update(Gtux_Model_Abstract $elemento)
	{
	  if (strlen($elemento->getNombre())>0) 
	  {
	  	$data['nombre'] = $elemento->getNombre();
	  }
	  $id = $elemento->getIdElemento();
	  if (null !== $id && sizeof($data) > 0) 
	  {
	  	$where = $this->getDbTable()
	  	              ->getAdapter()
	  	              ->quoteInto('id_elemento = ?', $elemento->getIdElemento());
      return $this->getDbTable()->update($data, $where);	  	              
	  }
    else
    {
      $this->_logger->err('Se intento actualizar un elemento sin id');
      throw new Zend_Db_Exception('Se intento actualizar un elemento sin id');
    }
	}

  /**
   * @see Gtux_Model_Gateway_Abstract::save()
   *
   * @param Gtux_Model_Abstract $model
   */
  public function save(Gtux_Model_Abstract $elemento)
  {
    throw new LogicException('No se puede implementar Save en Gtux_Model_Elemento');
  }
  
}
?>